
# -*- coding: utf-8 -*-
'''
@author: Ricardo Faria 6315 e Luis Freitas 5602
Classe que le um ficheiro xls e cria uma base de dados a partir dele
'''

import xlrd
import sqlalchemy
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, String, Integer, create_engine
from sqlalchemy.orm import scoped_session, sessionmaker

Base = declarative_base()
DBSession = scoped_session(sessionmaker())

class Colocado(Base):
        '''
        Classe em que sao declaradas as tabelas da base de dados
        
        '''
        __tablename__ = "colocados"    

        id = Column(Integer, primary_key=True)
        cod_instituicao = Column(String(4))
        cod_curso = Column(String(4))
        nome_instituicao = Column(String(50))
        nome_curso = Column(String(50))
        grau = Column(String(2))
        vagas_iniciais = Column(String(8))
        colocados = Column(String(3))
        nota_ultimo_colocado = Column(String(8))
        vagas_sobrantes = Column(String(8))
        '''
        Método que inicia a classe
        '''
        def __init__(self, cod_instituicao, cod_curso, nome_instituicao, nome_curso, grau, vagas_iniciais, colocados, nota_ultimo_colocado, vagas_sobrantes):
                self.cod_instituicao = cod_instituicao
                self.cod_curso = cod_curso
                self.nome_instituicao = nome_instituicao
                sefl.nome_curso = nome_curso
                self.grau = grau
                self.vagas_iniciais = vagas_iniciais
                self.colocados = colocados
                self.nota_ultimo_colocado = nota_ultimo_colocado
                self.vagas_sobrantes = vagas_sobrantes

               
def criar_db(nome_ficheiro):
        '''
        Método que permite inserir os dados da Base de Ddos SQLAlchemy
        através de um ficheiro xls
        '''
        book = xlrd.open_workbook(nome_ficheiro)
        sheet = book.sheet_by_index(0)
        linha_inicial = 3               #linha inicial dos dados
        linha_final = sheet.nrows-2     #linha final dos dados

        engine = create_engine('sqlite:///Data.db', echo = False)

        DBSession.remove()
        DBSession.configure(bind=engine, autoflush=False, expire_on_commit=False)
        Base.metadata.drop_all(engine)
        Base.metadata.create_all(engine)    
        '''
        Ciclo onde sao inseridos os elementos na base de dados
        através de cada celula do ficheiro
        '''
        for x in range(linha_inicial, linha_final):
                engine.execute(Colocado.__table__.insert(),
                               {"cod_instituicao": sheet.cell_value(x, 0),
                                "cod_curso": sheet.cell_value(x, 1),
                                "nome_instituicao": sheet.cell_value(x, 2),
                                "nome_curso": sheet.cell_value(x, 3),
                                "grau": sheet.cell_value(x, 4),
                                "vagas_iniciais": sheet.cell_value(x, 5),
                                "colocados":sheet.cell_value(x, 6),
                                "nota_ultimo_colocado": sheet.cell_value(x, 7),
                                "vagas_sobrantes": sheet.cell_value(x, 8)})



